#include <iostream>
#include <vector>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

using namespace std;

typedef void (*taskFun)();
vector<taskFun> v;

void fun_one()
{
    cout << "任务一" << endl;
}
void fun_tow()
{
    cout << "任务二" << endl;
}

void load()
{
    v.push_back(fun_one);
    v.push_back(fun_tow);
}

int main()
{
    int id = fork();

    if (id == 0)
    {
        int cnt = 5;
        while (cnt)
        {
            printf("i am child: %d, pid: %d, ppid: %d\n", cnt -- , getpid(), getppid());
            sleep(1);
        }
        exit(11);
    }
    else 
    {
        int flag = 0;
        while (!flag)
        {
            int status = 0;
            int res = waitpid(-1, &status, WNOHANG);
            if (res > 0)
            {
                printf("子进程退出成功！退出码：%d\n", WEXITSTATUS(status));
                flag = 1;
            }
            else if (res == 0)
            {
                printf("子进程还在运行中，父进程需要等等，处理一下其它的事情？？？\n");
                // 执行其它的任务
                if (v.empty()) load();
                for (auto e : v)
                    e();
            }
            else 
            {
                printf("wait失败\n");
                flag = 1;
            }
            sleep(1);
        }
    }

    return 0;
}
